package biblioteca.ejb.dao;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import biblioteca.entities.Livro;
import biblioteca.entities.Usuario;

@Stateless
public class LivroDAOImpl implements LivroDAORemote {
	
	@PersistenceContext(unitName="bibliotecaPU")
	private EntityManager em;

	@SuppressWarnings("unchecked")
	@Override
	public List<Livro> getLivros(int idUsuario) {
		Query query = em.createNamedQuery("getLivrosByUsuario");
		query.setParameter("idUsuario", idUsuario);
		return query.getResultList();
	}

	@Override
	public boolean adicionaLivro(int idUsuario, Livro novo) {
		if (em != null) {
			em.persist(novo);
			Usuario usr = em.getReference(Usuario.class, idUsuario);
			if (usr != null) {
				List<Livro> livros = usr.getLivros();
				// if ( !livros.contains(novo) ) {
				livros.add(novo);
				usr.setLivros(livros);
				return true;
			}
		}
		return false;
	}

	@Override
	public void removeLivro(int idUsuario, int idLivro) {
		Livro aRemover = em.getReference(Livro.class, idLivro);
		Usuario usr = em.getReference(Usuario.class, idUsuario);
		if (usr != null && aRemover != null) {
			usr.getLivros().remove(aRemover);
			em.remove(aRemover);
		}
	}

	@Override
	public Livro getLivro(int id) {
		return em.getReference(Livro.class, id);
	}

	@Override
	public void alterarLivro(Livro aAlterar) {
		em.merge(aAlterar);
	}

}
